home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / fmc.fpl < prev    next >
Text File  |  1996-07-24  |  6KB  |  211 lines

  1. // $Id: FMC.FPL 1.13 1996/07/24 23:02:32 jskov Exp $
  2. // $VER: FMC.FPL 2.4 (24.07.96) © Jesper Skov
  3.  
  4. int maxMajor=10;                            // We have a maximum number of modes!
  5. int majorCount=0;
  6.  
  7. int maxMinor=20;
  8. int minorCount=0;
  9.  
  10. export string majorName[maxMajor];            // Major modes have Name,
  11. export string majorExt[maxMajor];            // Extension match and
  12. export string majorExe[maxMajor];            // Execute string
  13.  
  14. string minorName[maxMinor];                    // Minor modes have no ext&exe
  15.  
  16. export string majorCycleString = "None";    // For use by PromptInfo
  17. export string majorConfigString = "";
  18.  
  19. export string minorCheckString = "";
  20.  
  21.  
  22. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» AddMode() ««
  23. export int AddMode(int type,
  24.                    string name,
  25.                    string extensions,
  26.                    string execute)
  27. {
  28.   // Check that name exists?
  29.  
  30.   if (type){                                // type_major==1
  31.     if (majorCount>=maxMajor)
  32.       return 1;                                // Bummer! No more space!
  33.  
  34.     majorName[majorCount]=name;
  35.  
  36.     // Check that ext&exe exist?
  37.     majorExt[majorCount]=extensions;
  38.     majorExe[majorCount]=execute;
  39.  
  40.     majorCycleString += joinstr("|", name); // Add mode to MajorMode cycle gadget
  41.  
  42.     majorConfigString += joinstr(",\"", extensions, "\""); // Add extensions string
  43.     majorConfigString += joinstr(",\"", execute, "\""); // Add execute string
  44.  
  45.  
  46.     // The code below will cause trouble if a MajorMode is added, while the
  47.     // user is working (i.e. (s)he has several different buffers open).
  48.     // Since the AddMode() should only be for use in the startup, I don't
  49.     // see this as a problem, though!
  50.     DeleteInfo("MajorMode");
  51.     ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
  52.  
  53.     majorCount++;
  54.  
  55.     return 0;
  56.  
  57.   } else {                                    // type_minor==0
  58.     if (minorCount>=maxMinor)
  59.       return 1;                                // No more space
  60.  
  61.     minorName[minorCount]=name;
  62.     // Maybe warn if ext&exe are not empty?
  63.  
  64.     minorCheckString += joinstr(",\"", name, "\""); // Add mode to minor mode list
  65.  
  66.     minorCount++;
  67.     return 0;
  68.   }
  69. }
  70.  
  71. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckForce_hookPast ««
  72. export int CheckForced_hookPast()
  73. {
  74.   string req = GetLine();
  75.   int i = strstr(req,"-*-");                // Extract forced mode if any
  76.   if(majorCount) {
  77.     if (i>=0) {
  78.       int a = strstr(req,"-*-",i+3);
  79.       if(a>0) {
  80.         req = substr(req, i+3, a-i-3);        // rec holds major mode request
  81.       } else {
  82.         i=-1;
  83.       }
  84.     }
  85.     if(i>=0) {
  86.       for(i=0; i<majorCount; i++) {            // Check all major modes for match
  87.         if(0 == stricmp(majorName[i], req)) {
  88.           enableMajorMode(i);
  89.           return 0;
  90.         }
  91.       }
  92.     }
  93.   }
  94.   return 0;
  95. }
  96.  
  97. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CheckExt_hook() ««
  98. export int CheckExt_hook(string path, string name)
  99. {
  100.   int i = strstr(name, ".");
  101.   if (i > 0) {
  102.     string ext;
  103.     int a;
  104.     while (0<=(a=strstr(name, ".", i+1)))    // Check for 2+ pts
  105.       i=a;
  106.     a=0;
  107.     ext = joinstr("*",substr(name, i + 1, -1),"*");    
  108.     while(a<majorCount) {
  109.       if(0 <= stristr(ReadInfo(majorExt[a]), ext)) {
  110.         enableMajorMode(a);
  111.         return 0;
  112.       }
  113.       a++;
  114.     }
  115.     // no extension matched
  116.   }
  117.   return 0;
  118. }
  119.  
  120. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Rename_hookPast() ««
  121. export int Rename_hookPast(string name)
  122. {
  123.   CheckExt_hook("",name);
  124.   return 0;
  125. }
  126.  
  127.  
  128. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» enableMajorMode() ««
  129. void enableMajorMode(int number)
  130. {
  131.   int i;
  132.   
  133.   if (number>=0){
  134.     SetInfo(-1, "MajorMode", number+1);
  135.     SetInfo(-1, majorName[number], 1);        // Set major mode's flag
  136.  
  137.     for(i=0;i<minorCount;i++)                // Disable all minor modes
  138.       SetInfo(-1,minorName[i],0);
  139.  
  140.     SetInfo(-1,"face","");                    // Clear face
  141.       
  142.     if(strlen(ReadInfo(majorExe[number])))    // and execute it's exeString
  143.       ExecuteString(ReadInfo(majorExe[number]));
  144.     ReturnStatus(joinstr("Enabled major mode \"",majorName[number], "\"!"));
  145.   }
  146. }
  147.  
  148. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeControl() ««
  149. export void MajorModeControl()
  150. {
  151.   int i = ReadInfo("MajorMode");
  152.  
  153.   PromptInfo(-1, "Buffer Major Mode", -1,-1, "MajorMode");
  154.  
  155.   if (ReadInfo("MajorMode")!=i){            // New major mode selected
  156.     if (i)                                    // Disable "old" major mode
  157.       SetInfo(-1,majorName[i-1],0);
  158.  
  159.     enableMajorMode(ReadInfo("MajorMode")-1); // Enable new major mode
  160.   }
  161. }
  162.  
  163. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MinorModeControl() ««
  164. export void MinorModeControl()
  165. {
  166.   ExecuteString(joinstr("PromptInfo(-1, \"Buffer Minor Modes\", -1,-1",
  167.                         minorCheckString, ");"));
  168. }
  169.  
  170. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» MajorModeSettings() ««
  171. export void MajorModeSettings()
  172. {
  173.   ExecuteString(joinstr("PromptInfo(-1, \"Major Mode Preferences\", -1,-1",
  174.                         majorConfigString, ");"));
  175. }
  176.  
  177.  
  178. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» ME() ««
  179. export void ME(string mode_name)
  180. {
  181.   SetInfo(-1,mode_name,1);
  182. }
  183.  
  184. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info construction ««
  185. ConstructInfo("MajorMode", "","", "LCH", majorCycleString, 0,0,0);
  186.  
  187.  
  188. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Menu ««
  189.  
  190. MenuAdd("i", "Buffer Mode", "", "",
  191.         ReadInfo("menu_program_title"),
  192.         ReadInfo("menu_program_item")+1);    // Add new Customizing menu
  193.  
  194. MenuAdd("s", "Major...", "MajorModeControl();", "",
  195.         ReadInfo("menu_program_title"),
  196.         ReadInfo("menu_program_item")+1,-1);
  197. MenuAdd("s", "Minor...", "MinorModeControl();", "",
  198.         ReadInfo("menu_program_title"),
  199.         ReadInfo("menu_program_item")+1,-1);
  200.  
  201. MenuAdd("s", "Major Modes...", "MajorModeSettings();", "",
  202.         ReadInfo("menu_program_title"),
  203.         ReadInfo("menu_program_item"),-1); // Add to Program
  204. MenuBuild();
  205.  
  206.  
  207. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Hooking ««
  208. HookPast("Load","CheckForced_hookPast();"); // Checks forced requests
  209. HookPast("Rename","Rename_hookPast");        // Checks extension after rename
  210. Hook("GetFile", "CheckExt_hook");            // Checks extensions
  211.